package co.inventario.datos.sqlserver;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

import co.inventario.entidad.EmpleadoDTO;
import co.inventario.entidad.ZonaDTO;
import co.inventario.entidad.ZonaEmpleadoDTO;

public class ZonaEmpleadoDAOSQLServer {

	private String crearSQL;
	private String actualizarSQL;
	private String consultarSQL;

	public ZonaEmpleadoDAOSQLServer() {
		crearSQL = "";
		actualizarSQL = "";
		consultarSQL = "";
	}

	public void crear(ZonaEmpleadoDTO zonaEmpleadoDTO, Connection connection) throws SQLException {
		crearSQL = "INSERT INTO Zona_Empleado (In_Codigo_Zona, In_Codigo_Empleado) VALUES (?, ?)";
		try (PreparedStatement preparedStatement = connection.prepareStatement(crearSQL)) {
			preparedStatement.setInt(1, zonaEmpleadoDTO.getZonaDTO().getInCodigoZona());
			preparedStatement.setInt(2, zonaEmpleadoDTO.getEmpleadoDTO().getInCodigoEmpleado());
			preparedStatement.executeUpdate();
		} catch (SQLException exception) {
			System.err.println("Se ha presentado un problema creando la Zona x Empleado: " + exception.getMessage());
		}
	}

	public void actualizar(ZonaEmpleadoDTO zonaEmpleadoDTO, Connection connection) throws SQLException {
		actualizarSQL = "UPDATE Zona_Empleado SET In_Codigo_Zona = ISNULL(?, In_Codigo_Zona), In_Codigo_Empleado = ISNULL(?, In_Codigo_Empleado) WHERE In_Codigo_Zona_Empleado = ?";
		try (PreparedStatement preparedStatement = connection.prepareStatement(actualizarSQL)) {
			preparedStatement.setInt(1, zonaEmpleadoDTO.getZonaDTO().getInCodigoZona());
			preparedStatement.setInt(2, zonaEmpleadoDTO.getEmpleadoDTO().getInCodigoEmpleado());
			preparedStatement.setInt(3, zonaEmpleadoDTO.getInCodigoZonaEmpleado());
			preparedStatement.executeUpdate();
		} catch (SQLException exception) {
			System.err.println("Se ha presentado un problema actualizando la Zona x Empleado: " + exception.getMessage());
		}
	}

	public ZonaEmpleadoDTO consultarPorCodigo(ZonaEmpleadoDTO zonaEmpleadoDTO, Connection connection) throws SQLException {
		consultarSQL = "SELECT * FROM Zona_Empleado WHERE In_Codigo_Zona_Empleado = ?";
		ZonaEmpleadoDTO zonaEmpleadoDTOResultado = null;
		ZonaDTO zonaDTO = null;
		EmpleadoDTO empleadoDTO = null;
		try (PreparedStatement preparedStatement = connection.prepareStatement(consultarSQL)) {
			preparedStatement.setInt(1, zonaEmpleadoDTO.getInCodigoZonaEmpleado());
			try (ResultSet resultSet = preparedStatement.executeQuery()) {
				zonaEmpleadoDTOResultado = new ZonaEmpleadoDTO();
				zonaEmpleadoDTOResultado.setInCodigoZonaEmpleado(resultSet.getInt("In_Codigo_Zona_Empleado"));
				zonaDTO = new ZonaDTO();
				zonaDTO.setInCodigoZona(resultSet.getInt("In_Codigo_Zona"));
				zonaEmpleadoDTOResultado.setZonaDTO(zonaDTO);
				empleadoDTO = new EmpleadoDTO();
				empleadoDTO.setInCodigoEmpleado(resultSet.getInt("In_Codigo_Empleado"));
				zonaEmpleadoDTOResultado.setEmpleadoDTO(empleadoDTO);
			}
		} catch (SQLException exception) {
			System.err.println("Se ha presentado un problema consultando la Zona x Empleado a traves del codigo: " + exception.getMessage());
		}
		return zonaEmpleadoDTOResultado;
	}

	public ZonaEmpleadoDTO consultarPorZona(ZonaEmpleadoDTO zonaEmpleadoDTO, Connection connection) throws SQLException {
		consultarSQL = "SELECT * FROM Zona_Empleado WHERE In_Codigo_Zona = ?";
		ZonaEmpleadoDTO zonaEmpleadoDTOResultado = null;
		ZonaDTO zonaDTO = null;
		EmpleadoDTO empleadoDTO = null;
		try (PreparedStatement preparedStatement = connection.prepareStatement(consultarSQL)) {
			preparedStatement.setInt(1, zonaEmpleadoDTO.getZonaDTO().getInCodigoZona());
			try (ResultSet resultSet = preparedStatement.executeQuery()) {
				zonaEmpleadoDTOResultado = new ZonaEmpleadoDTO();
				zonaEmpleadoDTOResultado.setInCodigoZonaEmpleado(resultSet.getInt("In_Codigo_Zona_Empleado"));
				zonaDTO = new ZonaDTO();
				zonaDTO.setInCodigoZona(resultSet.getInt("In_Codigo_Zona"));
				zonaEmpleadoDTOResultado.setZonaDTO(zonaDTO);
				empleadoDTO = new EmpleadoDTO();
				empleadoDTO.setInCodigoEmpleado(resultSet.getInt("In_Codigo_Empleado"));
				zonaEmpleadoDTOResultado.setEmpleadoDTO(empleadoDTO);
			}
		} catch (SQLException exception) {
			System.err.println("Se ha presentado un problema consultando la Zona x Empleado a traves de la zona: " + exception.getMessage());
		}
		return zonaEmpleadoDTOResultado;
	}

	public ArrayList<ZonaEmpleadoDTO> consultarTodo(Connection connection) throws SQLException {
		consultarSQL = "SELECT * FROM Zona_Empleado";
		ZonaEmpleadoDTO zonaEmpleadoDTOResultado = null;
		ZonaDTO zonaDTO = null;
		EmpleadoDTO empleadoDTO = null;
		ArrayList<ZonaEmpleadoDTO> zonaEmpleadoDTOLista = null;
		try (PreparedStatement preparedStatement = connection.prepareStatement(consultarSQL)) {
			try (ResultSet resultSet = preparedStatement.executeQuery()) {
				zonaEmpleadoDTOResultado = new ZonaEmpleadoDTO();
				zonaEmpleadoDTOResultado.setInCodigoZonaEmpleado(resultSet.getInt("In_Codigo_Zona_Empleado"));
				zonaDTO = new ZonaDTO();
				zonaDTO.setInCodigoZona(resultSet.getInt("In_Codigo_Zona"));
				zonaEmpleadoDTOResultado.setZonaDTO(zonaDTO);
				empleadoDTO = new EmpleadoDTO();
				empleadoDTO.setInCodigoEmpleado(resultSet.getInt("In_Codigo_Empleado"));
				zonaEmpleadoDTOResultado.setEmpleadoDTO(empleadoDTO);
				zonaEmpleadoDTOLista = new ArrayList<ZonaEmpleadoDTO>();
				zonaEmpleadoDTOLista.add(zonaEmpleadoDTOResultado);
			}
		}
		return zonaEmpleadoDTOLista;
	}
}
